/*
* 地图：1是陆地，0是水域
* 111110
* 000110
* 001010
* 000010
*
* 上下左右都是水域，并且中间是陆地的区域就是岛屿（陆地可以相连）
* 所以上面只有两个岛屿
*
* */

let map = [
    [1,1,0,0,0],
    [1,1,0,0,0],
    [0,0,1,0,0],
    [0,0,0,1,1],
]

function countIsland(map){
    let count = 0 //计数器，记录当前岛屿数量
    for(let i = 0; i < map.length; i++){ //行
        let row = map[i]
        for(let j = 0; j < row.length; j++){ //列
            if(row[j] === 1){ //如果该元素是陆地，就搜索该元素的上下左右（row[j]表示第i行第j个元素）
                dfs(map,i,j) //调用搜素周围区域的方法，判断该点是否为岛屿
                count++ //岛屿计数加一
            }
        }
    }
    return count
}

function dfs(map,i,j){ //搜索周围区域
    let point = map[i] && map[i][j] //map[i]是第i行，map[i][j]是第i行第j个元素，当这一行存在并且这一行有元素时，才为点

    //判断该点的情况
    if(point === 0 || !point){ //当该点为水域或者该点不存在
        return
    }

    //否则就是陆地，搜索该点的上下左右是否为陆地
    //设表先关，将探索过的区域变为0，否则会陷入死循环
    map[i][j] = 0
    dfs(map,i-1,j)
    dfs(map,i+1,j)
    dfs(map,i,j-1)
    dfs(map,i,j+1)
}
countIsland(map)